mod lexer_mod;
mod parser_mod;
mod tests;
mod virtual_machine_mod;

use std::fmt::{Debug, Display, Formatter};

use crate::parser_mod::Parser;

//解析Token

fn main() {
    println!("表达式测试:");
    let token_test_string = "int i=(33*44-11)+(64*32/16)-1-2-3-(3+4)/(2+3)";
    let mut lexer = lexer_mod::Lexer::new(token_test_string.to_string());
    lexer.read_token();
    if lexer.is_legal() {
        println!("解析完成");
        lexer.print_tokens();
        let mut parser = Parser::new(lexer.tokens);
        let result = parser.parse();
        println!("表达式结果:{:#?}", result);
        parser.is_legal();
    }

    println!("语法测试:");
    let token_test_string = "class User{
        func User(){
            while true{}
            for(i=0;i=1;i=2){}
            if true{}else{}
            int i=0;
            user User=null;
            int i=i+2345*(3+4);
        }
        func GetUser(string username,int age):User{
            print(username,age);
            print();
        }
    }";
    let mut lexer = lexer_mod::Lexer::new(token_test_string.to_string());
    lexer.read_token();
    if lexer.is_legal() {
        println!("解析完成");
        lexer.print_tokens();
        let mut parser = Parser::new(lexer.tokens);
        let result = parser.parse();
        println!("表达式结果:{:#?}", result);
        parser.is_legal();

        if let Some(result) = result {
            Parser::traverse(result)
        }
    }
    return;
}
